package com.example.myletcodelearing.one

import java.util.*
import kotlin.collections.HashMap


/**
 * @author tgw
 * @date 2022/11/7
https://leetcode.cn/contest/weekly-contest-314/problems/the-employee-that-worked-on-the-longest-task/
共有 n 位员工，每位员工都有一个从 0 到 n - 1 的唯一 id 。

给你一个二维整数数组 logs ，其中 logs[i] = [idi, leaveTimei] ：

idi 是处理第 i 个任务的员工的 id ，且
leaveTimei 是员工完成第 i 个任务的时刻。所有 leaveTimei 的值都是 唯一 的。
注意，第 i 个任务在第 (i - 1) 个任务结束后立即开始，且第 0 个任务从时刻 0 开始。

返回处理用时最长的那个任务的员工的 id 。如果存在两个或多个员工同时满足，则返回几人中 最小 的 id 。



示例 1：

输入：n = 10, logs = [[0,3],[2,5],[0,9],[1,15]]
输出：1
解释：
任务 0 于时刻 0 开始，且在时刻 3 结束，共计 3 个单位时间。
任务 1 于时刻 3 开始，且在时刻 5 结束，共计 2 个单位时间。
任务 2 于时刻 5 开始，且在时刻 9 结束，共计 4 个单位时间。
任务 3 于时刻 9 开始，且在时刻 15 结束，共计 6 个单位时间。
时间最长的任务是任务 3 ，而 id 为 1 的员工是处理此任务的员工，所以返回 1 。
示例 2：

输入：n = 26, logs = [[1,1],[3,7],[2,12],[7,17]]
输出：3
解释：
任务 0 于时刻 0 开始，且在时刻 1 结束，共计 1 个单位时间。
任务 1 于时刻 1 开始，且在时刻 7 结束，共计 6 个单位时间。
任务 2 于时刻 7 开始，且在时刻 12 结束，共计 5 个单位时间。
任务 3 于时刻 12 开始，且在时刻 17 结束，共计 5 个单位时间。
时间最长的任务是任务 1 ，而 id 为 3 的员工是处理此任务的员工，所以返回 3 。
 */

fun main(args: Array<String>) {

    var op = Solution15.Solution()
    var nums1 = arrayOf(0, 10)
    var nums2 = arrayOf(1, 20)
    var nums3 = arrayOf(2, 12)
    var nums4 = arrayOf(7, 17)
    var nums = arrayOf(nums1, nums2, nums3, nums4)


    op.hardestWorker(10, nums)


}

private class Solution15 {
    class Solution {

        fun hardestWorker(n: Int, logs: Array<Array<Int>>): Int {
            var map = HashMap<Int, Int>()
            var maxTimeValue = 0;
            for (index in 0 until logs.size) {
                if (index == 0) {
//                    map.put(logs[index][0],logs[index][1])
                    maxTimeValue = logs[index][1]
                    map.put(maxTimeValue, logs[index][0])
                } else {
//                    map.put(logs[index][0],logs[index][1]-logs[index-1][1])
                    val currentMax = logs[index][1] - logs[index - 1][1]
                    if (maxTimeValue == currentMax) {
                        //差值相等的时候只有这次的id小于上次的id，才重新赋值
                        if (map.get(maxTimeValue)!! > logs[index][0]) {
                            map.put(maxTimeValue, logs[index][0])
                        }
                    } else if (maxTimeValue < currentMax) {
                        maxTimeValue = currentMax;
                        map.put(maxTimeValue, logs[index][0])
                    }

                }
            }

            var index = map.get(maxTimeValue) ?: -1
            print("下标值：$index")

            return index
        }
    }


}
